{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ['CUDA_VISIBLE_DEVICES'] = ''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3386\n",
      "  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))\n",
      "/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3904\n",
      "  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))\n"
     ]
    }
   ],
   "source": [
    "import json\n",
    "import malaya\n",
    "from tqdm import tqdm\n",
    "from unidecode import unidecode"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "\n",
    "def cleaning(splitted, split = False):\n",
    "    if split:\n",
    "        splitted = malaya.text.function.split_into_sentences(splitted)\n",
    "    if splitted[0][0] == '-':\n",
    "        splitted[0] = splitted[0].replace('- ','')\n",
    "    points = [f'{no + 1}. {s}' for no, s in enumerate(splitted)]\n",
    "    points = ' '.join(points)\n",
    "    return points\n",
    "\n",
    "def simple_cleaning(string):\n",
    "    return re.sub(r'[ ]+', ' ', unidecode(string).replace('\\n', ' ').replace('\\r', ' ')).strip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "months = {\n",
    "    'january',\n",
    "    'jan',\n",
    "    'januari',\n",
    "    'february',\n",
    "    'feb',\n",
    "    'februari',\n",
    "    'march',\n",
    "    'mac',\n",
    "    'april',\n",
    "    'apr',\n",
    "    'may',\n",
    "    'mei',\n",
    "    'june',\n",
    "    'jun',\n",
    "    'july',\n",
    "    'julai',\n",
    "    'august',\n",
    "    'ogos',\n",
    "    'aug',\n",
    "    'september',\n",
    "    'sep',\n",
    "    'october',\n",
    "    'oktober',\n",
    "    'oct',\n",
    "    'november',\n",
    "    'nov',\n",
    "    'december',\n",
    "    'disember',\n",
    "    'dec',\n",
    "    'utusan',\n",
    "    'malaysiakini',\n",
    "    'astroawani',\n",
    "    'bernama',\n",
    "    'com',\n",
    "}\n",
    "\n",
    "malaysian_news = {\n",
    "    'kosmo',\n",
    "    'hmetro',\n",
    "    'malaymail',\n",
    "    'projekmm',\n",
    "    'bharian',\n",
    "    'utusan',\n",
    "    'astroawani',\n",
    "    'themalaysianinsight',\n",
    "    'malaysiakini',\n",
    "    'bernama',\n",
    "    'abdullahjones',\n",
    "    'daily',\n",
    "    'awani',\n",
    "    'astro',\n",
    "}\n",
    "\n",
    "def remove_colon(string):\n",
    "    string = re.sub(r'[ ]+', ' ', string).strip()\n",
    "    if string.strip()[0] == ':':\n",
    "        string = string[1:]\n",
    "    return re.sub(r'[ ]+', ' ', string).strip()\n",
    "\n",
    "def remove_first_dash_month(string):\n",
    "    string = unidecode(string)\n",
    "    if 0 < string.find('-') < 50:\n",
    "        sub = string[:string.find('-')]\n",
    "        if len(set(sub.lower().split()) & months):\n",
    "            string = string[string.find('-') + 1:]\n",
    "    return re.sub(r'[ ]+', ' ', string).strip()\n",
    "\n",
    "def remove_last_dash(string):\n",
    "    rfind = string.rfind('-')\n",
    "    if rfind > 0 and len(string[rfind:]) < 50:\n",
    "        if any([m in string.lower() for m in malaysian_news]):\n",
    "            string = string[:rfind]\n",
    "    return re.sub(r'[ ]+', ' ', string).strip()\n",
    "\n",
    "def remove_last_dash_dash(string):\n",
    "    rfind = string.rfind('--')\n",
    "    if rfind > 0 and len(string[rfind:]) < 50:\n",
    "        if any([m in string.lower() for m in malaysian_news]):\n",
    "            string = string[:rfind]\n",
    "    return re.sub(r'[ ]+', ' ', string).strip()\n",
    "    \n",
    "def clean_news(string, filter_news = True):\n",
    "    splitted = malaya.text.function.split_into_sentences(string, minimum_length = 10)\n",
    "    if filter_news:\n",
    "        filtered = []\n",
    "        for s in splitted:\n",
    "            if not any([m in s.lower() for m in malaysian_news]):\n",
    "                filtered.append(s)\n",
    "    else:\n",
    "        filtered = splitted\n",
    "    \n",
    "    s = ' '.join(filtered)\n",
    "    s = remove_colon(s)\n",
    "    s = remove_first_dash_month(s)\n",
    "    s = remove_last_dash(s)\n",
    "    s = remove_last_dash_dash(s)\n",
    "    return s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 husein husein 541M Dis   1 18:14 news.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls -lh news.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 husein husein 414M Dis   4 16:47 news-astroawani.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls -lh news-astroawani.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 husein husein 376M Dis   1 22:27 article.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls -lh article.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 husein husein 15M Dis   1 20:57 karangan.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls -lh karangan.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 husein husein 128M Dis   1 22:19 keywords-headline.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls -lh keywords-headline.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 husein husein 100M Dis   4 16:58 keywords-headline-astroawani.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls -lh keywords-headline-astroawani.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 husein husein 304M Dis   1 21:37 product-description.json\r\n"
     ]
    }
   ],
   "source": [
    "!ls -lh product-description.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = open('train.json', 'w')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  7%|██▍                               | 16019/219612 [00:11<02:19, 1454.55it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 28%|█████████▎                        | 60533/219612 [00:44<02:10, 1219.77it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 39%|█████████████▋                     | 86230/219612 [01:08<02:24, 922.90it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 59%|███████████████████▎             | 128727/219612 [01:47<01:19, 1143.58it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "string index out of range\n",
      "string index out of range\n",
      "string index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 60%|███████████████████▉             | 132548/219612 [01:51<01:15, 1148.45it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 68%|██████████████████████▍          | 148960/219612 [02:05<01:02, 1127.30it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 79%|██████████████████████████       | 173612/219612 [02:28<00:39, 1160.03it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "string index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 82%|███████████████████████████▏     | 180543/219612 [02:34<00:37, 1043.61it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 88%|█████████████████████████████    | 193560/219612 [02:45<00:21, 1191.51it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 90%|█████████████████████████████▋   | 197677/219612 [02:49<00:21, 1012.82it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "string index out of range\n",
      "string index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████| 219612/219612 [03:08<00:00, 1167.16it/s]\n"
     ]
    }
   ],
   "source": [
    "with open('news.json') as fopen:\n",
    "    data = json.load(fopen)\n",
    "    \n",
    "for d in tqdm(data):\n",
    "    \n",
    "    if len(set(d[0].split())) < 20:\n",
    "        continue\n",
    "        \n",
    "    try:\n",
    "        src = cleaning(d[0], split = True)\n",
    "        tgt = clean_news(simple_cleaning(d[1]), filter_news = False)\n",
    "\n",
    "        d = {\"translation\": {\"src\": src, \"tgt\": tgt, 'prefix': 'surat-khabar: '}}\n",
    "        train.write(f'{json.dumps(d)}\\n')\n",
    "    except Exception as e:\n",
    "        print(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"translation\": {\"src\": \"1. Kazuki Yamamoto, 29, dari wilayah Okayama mencipta pelbagai haiwan kecil yang kelihatan realistik ketika bekerja di sebuah restoran. 2. Hasil seninya mula mendapat perhatian di seluruh dunia.\", \"tgt\": \"Seorang barista di Jepun mencipta hasil seni menarik dan comel hanya menggunakan buih susu dalam latte dihidangkannya. Kazuki Yamamoto, 29, dari wilayah Okayama mencipta pelbagai haiwan kecil yang nampak realistik ketika bekerja di sebuah restoran, sebelum hasil seninya itu mula mendapat perhatian di seluruh dunia. Kerja tangannya yang paling popular seekor kucing yang cuba masuk dari satu cawan ke cawan lain untuk menangkap ikan. Dia yang kini pengurus sebuah kafe di Harajyuku juga membuat buih berbentuk arnab dan kucing yang lain, dianggap pelanggannya sebagai 'terlalu comel sehingga tidak tergamak untuk meminumnya. ' \\\"Gambar kucing menangkap ikan menjadi popular selepas tersebar di Internet sehingga saya mendapat tawaran untuk menghadiri pelbagai acara dan bekerja di luar negara. \\\"Selepas itulah saya menerima tawaran kerja di kafe ini sekarang. Paling penting untuk rekaan saya adalah menggunakan krim yang lembut dan susu berkualiti tinggi. \\\"Saya tidak menafikan teknik ini boleh ditiru, namun tiada sesiapa mampu meniru idea saya yang tersendiri ini. Bagi saya seni latte 3D ini mungkin mudah dimusnahkan, tetapi melihatnya menggembirakan pelanggan saya,\\\" katanya.\", \"prefix\": \"surat-khabar: \"}}\r\n"
     ]
    }
   ],
   "source": [
    "!tail -n 1 train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 31%|██████████▌                       | 55326/178407 [00:42<01:43, 1187.78it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 36%|████████████▏                     | 63758/178407 [00:49<01:28, 1292.63it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 39%|█████████████▍                    | 70381/178407 [00:54<01:17, 1391.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 40%|█████████████▍                    | 70799/178407 [00:54<01:19, 1356.37it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 48%|████████████████▎                 | 85785/178407 [01:06<01:13, 1252.12it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 52%|█████████████████▊                | 93387/178407 [01:12<01:09, 1220.76it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 60%|███████████████████▊             | 107355/178407 [01:24<00:52, 1364.80it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████| 178407/178407 [02:23<00:00, 1242.52it/s]\n"
     ]
    }
   ],
   "source": [
    "with open('news-astroawani.json') as fopen:\n",
    "    data = json.load(fopen)\n",
    "    \n",
    "for d in tqdm(data):\n",
    "    \n",
    "    if len(set(d[0].split())) < 20:\n",
    "        continue\n",
    "        \n",
    "    try:\n",
    "        src = cleaning(d[0], split = True)\n",
    "        tgt = clean_news(simple_cleaning(d[1]), filter_news = False)\n",
    "\n",
    "        d = {\"translation\": {\"src\": src, \"tgt\": tgt, 'prefix': 'surat-khabar: '}}\n",
    "        train.write(f'{json.dumps(d)}\\n')\n",
    "    except Exception as e:\n",
    "        print(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"translation\": {\"src\": \"1. Sekumpulan remaja Australia mula dikenali apabila memuatnaik video klip \\\"HarlemShake v1\\\" ke laman YouTube pada 2 Februari. 2. Sehingga kini, video tersebut telah ditonton lebih 12 juta orang dan angkanya terus meningkat.\", \"tgt\": \"Sekumpulan belia Australia telah mencetuskan mania baru di Internet apabila menghasilkan sebuah gerak tari yang digelar \\\"HarlemShake\\\", iaitu tarian gerakan pinggul yang sehingga kini telah membuatkan ribuan pengguna Internet meniru aksi itu. Lima remaja itu yang berasal dari Sunshine Coast, Australia mula dikenali apabila memuatnaik rakaman video klip \\\"The Harlem Shake v1(TSCS original)\\\" (video di bawah) yang berdurasi 31 saat ke laman YouTube pada 2 Februari. Sehingga kini ia telah ditonton lebih 12 juta orang dan angkanya terus meningkat. Tarian gerakan pinggul itu bermula dengan kemunculan seorang lelaki bertopi keledar yang menari mengikut rentak lagu \\\"HarlemShake\\\" yang dihasilkan oleh artis meningkat naik dari Brooklyn, DJ Baauer. Lelaki itu menari tanpa dihiraukan oleh orang ramai yang berada dalam sebuah bilik. Beberapa saat kemudian, semua yang berada dalam bilik tersebut menari bersama termasuk bergoyang dan bergelek mengikut rentak lagu tersebut. Gerak tarian itu sebenarnya dimulakan oleh seorang blogger video, Filthy Frank. Namun ia jadi popular selepas versi anak muda dari Australia itu dimuatnaik di YouTube. Melalui YouTube, ribuan klip \\\"Harlem Shake\\\" telah dimuatnaik setiap hari dengan setiap gerakan tarian itu dilakukan oleh pelbagai orang termasuk sekumpulan anggota tentera. Ia juga dilakukan di pelbagai tempat seperti di pejabat, bilik lokar, gerabak kereta api dan perhentian bas. Kebanyakan video klip tersebut menyarung pelbagai jenis kostum yang agak pelik termasuklah topeng. \\\"Harlem Shake\\\" adalah sebuah video klip gerak tari pinggul berdurasi 30 atau 32 saat yang dimulakan oleh seorang individu yang samada memakai topeng atau topi keledar. Individu itu akan menari dengan gaya menggerakkan pinggulnya di khalayak ramai namun tiada siapa yang mengambil peduli akan tariannya itu. beberapa saat kemudian, video klip itu akan berubah dimana orang ramai yang pada mulanya tidak mempedulikan individu itu tadi akan berdansa bersama dengan pelbagai aksi yang dianggap pelik. Malah, corak pemakaian yang digunakan juga menggunakan kostum-kostum pelik seperti kostum adiwira, ahli sukan dan pelbagai lagi.\", \"prefix\": \"surat-khabar: \"}}\r\n"
     ]
    }
   ],
   "source": [
    "!tail -n 1 train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████| 130390/130390 [00:05<00:00, 22782.70it/s]\n"
     ]
    }
   ],
   "source": [
    "with open('article.json') as fopen:\n",
    "    data = json.load(fopen)\n",
    "    \n",
    "for i in tqdm(range(len(data['before']))):\n",
    "        \n",
    "    try:\n",
    "        src = cleaning(data['before'][i])\n",
    "        tgt = simple_cleaning(data['after'][i])\n",
    "\n",
    "        d = {\"translation\": {\"src\": src, \"tgt\": tgt, 'prefix': 'artikel: '}}\n",
    "        train.write(f'{json.dumps(d)}\\n')\n",
    "    except Exception as e:\n",
    "        print(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"translation\": {\"src\": \"1. Majlis Evangelical untuk Akauntabiliti Kewangan (ECFA) adalah persatuan piawaian kewangan Amerika yang mewakili organisasi dan gereja Kristian evangelis, yang memenuhi syarat untuk status bebas cukai, bukan untung dan menerima sumbangan yang boleh ditolak cukai. 2. Ditubuhkan pada tahun 1979, ECFA mengakreditasi lebih dari 2,200 organisasi anggota yang telah menunjukkan kepatuhan terhadap standard kewangannya. 3. Sehingga 2015, pendapatan tahunan kolektif organisasi anggota ECFA dilaporkan hampir $ 25 bilion.\", \"tgt\": \"Pada tahun 1979, ECFA diasaskan oleh Billy Graham Evangelistic Association dan cabang US World Vision (World Vision International bukan anggota ECFA). ECFA ditubuhkan dengan penubuhan tujuh standard pertanggungjawaban yang merangkumi tadbir urus lembaga, syarat untuk penyata kewangan yang diaudit, keperluan untuk pendedahan orang ramai mengenai penyata kewangan yang diaudit, penghindaran konflik kepentingan, dan standard mengenai aktiviti penggalangan dana. Dipercayai bahawa standard pertanggungjawaban yang dicadangkan umumnya melebihi syarat undang-undang. Badan amal Evangelical dapat memohon akreditasi dan diminta untuk menyerahkan maklumat yang akan dikaji dan dinilai sesuai dengan standard tersebut. Mereka yang memenuhi standard tersebut akan diakreditasi dan diberi meterai persetujuan. Misi ECFA adalah untuk membantu organisasi amal agama untuk memperoleh dan menjaga rasa hormat dan keyakinan masyarakat terhadap operasi badan amal masing-masing melalui pematuhan dengan Standard, dan untuk melindungi orang ramai penderma dari kemungkinan tingkah laku yang tidak beretika dalam pengurusan urusan badan amal. Pernyataan misi yang diterima pakai oleh ECFA adalah seperti berikut: \\\"Meningkatkan Kepercayaan dalam Gereja dan Kementerian yang Dipusatkan Kristus\\\". Ulasan mengenai pernyataan misi boleh didapati di Laman Web ECFA. Anggota ECFA adalah badan amal yang dianjurkan di AS, biasanya 501 (c) 3 organisasi nirlaba dan gereja Evangelikal. Sebagai organisasi akreditasi, ECFA memberikan meterai persetujuan kepada anggota-anggota yang mematuhi Tujuh Piawaian Akauntabiliti. Walau bagaimanapun, senarai bekas anggota ECFA juga merangkumi penamatan kerana gagal memberikan maklumat atau mematuhi sepenuhnya piawaian. Dalam tinjauan tahun 2004, ECFA dilihat oleh responden sebagai program akreditasi yang berkesan yang memberikan jaminan hak kewangan bagi anggotanya. ECFA membentuk Suruhanjaya Kebertanggungjawaban dan Dasar untuk Organisasi Agama untuk membantu proses ini. Selain panel agama, ada juga panel undang-undang, dan panel bukan keuntungan. Pada April 2011, ECFA menamakan ahli-ahli kepada suruhanjaya tersebut. ECFA adalah penaja dan tuan rumah bagi suruhanjaya itu dan bertanggungjawab terhadap kos logistik Suruhanjaya. Sumbangan awam diminta untuk menyokong aktiviti Suruhanjaya.\", \"prefix\": \"artikel: \"}}\r\n"
     ]
    }
   ],
   "source": [
    "!tail -n 1 train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████| 2533/2533 [00:00<00:00, 11805.29it/s]\n"
     ]
    }
   ],
   "source": [
    "with open('karangan.json') as fopen:\n",
    "    data = json.load(fopen)\n",
    "    \n",
    "for i in tqdm(range(len(data['before']))):\n",
    "    try:\n",
    "        src = cleaning(data['before'][i])\n",
    "        tgt = simple_cleaning(data['after'][i])\n",
    "\n",
    "        d = {\"translation\": {\"src\": src, \"tgt\": tgt, 'prefix': 'karangan: '}}\n",
    "        train.write(f'{json.dumps(d)}\\n')\n",
    "    except Exception as e:\n",
    "        print(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"translation\": {\"src\": \"1. selebriti dan orang-orang ternama negara seperti menteri dan tokoh korporat perlu menunjukkan tauladan dan menggalakkan masyarakat menggunakan laman sosial masing-masing 2. kempen secara meluas dan menggunakan sentimen kemasyarakatan pasti dapat menggalakkan orang ramai untuk melakukannya 3. Doktor pula memerlukan bekalan darah bagi menstabilkan bilangan darah pesakit 4. menderma adalah dapat membantu pesakit 5. apakah kebaikan dan langkah menggalakkan orang ramai menderma demi manfaat bersama 6. Keperluan dan permintaan terhadap darah meningkat dari tahun ke tahun hasil perkembangn industri kesihatan di dalam negara 7. Bagi menggalakkan orang ramai 8. orang ramai boleh dipengaruhi untuk menderma 9. hospital memerlukan sumbangan daripada pesakit 10. penting dalam merawat pesakit di hospital 11. dalam kesusahan dan boleh dianggap sebagai wira 12. Seperti ungkapan orang-orang tua 13. bukan sahaja memudahkan aktiviti malah dapat membudayakannya sebagai satu tanggungjawab sosial korporat 14. iklan khidmat masyarakat boleh diperbanyakkan siaran di televisyen dan radio\", \"tgt\": \"Tahukah anda, apabila anda derma darah walaupun sekali, anda dianggap sebagai insan yang istimewa kerana telah memberikan sumbangan yang tidak ternilai harganya? Umum sedia maklum, darah adalah komponen yang penting dalam merawat pesakit di hospital. Keperluan dan permintaan terhadap darah meningkat dari tahun ke tahun hasil perkembangn industri kesihatan di dalam negara kita. Rawatan seperti pembedahan jantung, pemindahan organ dan pesakit talasemia memerlukan pemindahan dan penggunaan yang banyak. Kemeterian Kesihatan Malaysia telah pun menetapkan sasaran untuk menjadikan sekurang-kurangnya lima peratus rakyat di Malaysia sebagai penderma darah yang aktif. Walaupun sasaran itu tidak tercapai, namun bilangan penderma serta unit yang didermakan semakin meningkat dari tahun ke tahun. Persoalannya, apakah kebaikan dan langkah menggalakkan orang ramai menderma demi manfaat bersama? Antara kebaikan yang akan diperoleh sekiranya kita menderma adalah dapat membantu pesakit yang memerlukan. Setiap hari, pasti berlaku kemalangan dan kes-kes kecemasan di hospital. Doktor pula memerlukan bekalan darah bagi menstabilkan bilangan darah pesakit yang kehilangan darahnya dalam proses rawatan yang diberi. Bayangkan jika pesakit tersebut merupakan orang yang kita sayangi atau kenali, pasti kita akan melakukan perkara bagi menyelamatkan nyawa mereka. Justeru, kita dapat membantu orang yang dalam kesusahan dan boleh dianggap sebagai wira yang menyelamatkan pesakit yang memerlukan. Ibarat peribahasa Melayu, berat sama dipikul, ringan sama dijinjing. Tambahan pula, apabila berlaku pandemik seperti COVID-19, hospital memerlukan sumbangan daripada pesakit yang telah sembuh bagi tujuan penyelidikan dan menyumbang kepada pencarian vaksin terhadap penyakit tersebut. Intihannya, aktiviti ini dapat meringankan beban orang yang memerlukan dan kelak kita juga akan diberikan bantuan dalam pelbagai bentuk daripada Tuhan. Seperti ungkapan orang-orang tua, kita hendaklah sediakan payung sebelum hujan. Begitu juga ianya dapat menjamin kesihatan diri penderma daripada risiko penyakit-penyakit tertentu. Sebelum menderma, pegawai perubatan akan melakukan pemeriksaan kesihatan secara ringkas. Kemudian, mereka akan memaklumkan kepada penderma berkaitan kumpulan/ jenis, kadar tekanan darah, tahap kolesterol dan pelbagai lagi. Pemeriksaan kesihatan secara percuma ini dapat membantu kita mengetahui tahap kesihatan masing-masing dan pengesanan awal dapat dilaksanakan jika kita menghidapi sebarang penyakit. Bukan itu sahaja, darah yang diderma akan ditapi terlebih dahulu bagi mengenal pasti jika penderma terdapat jangkitan virus seperti HIV dan hepatitis. Bak kata pepatah, mencegah lebih baik daripada merawat. Kesannya, ianya dapat memastikan kita berwaspada terhadap ancaman kesihatan di samping membantu mereka yang memerlukan. Bagi menggalakkan orang ramai, masyarakat kita seharusnya membudayakan aktiviti ini di setiap peringkat. Ianya memerlukan kriteria seperti berumur 18 hingga 60 tahun dan berat badan melebihi 45 kilogram. Oleh itu, setiap pihak seperti majikan atau institusi pengajian tinggi boleh memainkan peranan dengan menganjurkan aktiviti di kawasan masing-masing secara berkala. Langkah ini bukan sahaja memudahkan aktiviti malah dapat membudayakannya sebagai satu tanggungjawab sosial korporat. Bagi pelajar di institusi pengajian tinggi, pemberian merit kepada mereka yang melakukan aktiviti murni ini pasti dapat menggalakkan pelajar-pelajar untuk menyertainya. Konsep orang berbudi kita berbahasa, orang memberi kita merasa wajar untuk diamalkan supaya kebaikan daripada aktiviti ini dimanfaatkan oleh semua pihak yang terlibat. Sejajar dengan langkah di atas, orang ramai boleh dipengaruhi untuk menderma dengan aktif melalui kempen yang lebih holistik. Masyarakat masa kini lebih gemar menonton video di media sosial berbanding siaran televisyen. Oleh itu, pihak kementerian dan agensi yang berkaitan perlu bekerjasama dalam melakukan intervensi terhadap kempen melalui seluruh platform media. Sebagai contoh, iklan khidmat masyarakat boleh diperbanyakkan siaran di televisyen dan radio. Manakala di sosial media, selebriti dan orang-orang ternama negara seperti menteri dan tokoh korporat perlu menunjukkan tauladan dan menggalakkan masyarakat menggunakan laman sosial masing-masing. Tindakan ini tidak seharusnya melibatkan sebarang kos kerana tiada harga yang boleh diletakkan atas nyawa seorang manusia. Natijahnya, kempen secara meluas dan menggunakan sentimen kemasyarakatan pasti dapat menggalakkan orang ramai untuk melakukannya dengan lebih kerap.\", \"prefix\": \"karangan: \"}}\r\n"
     ]
    }
   ],
   "source": [
    "!tail -n 1 train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████| 155967/155967 [00:32<00:00, 4811.14it/s]\n"
     ]
    }
   ],
   "source": [
    "with open('keywords-headline.json') as fopen:\n",
    "    data = json.load(fopen)\n",
    "\n",
    "for i in tqdm(range(len(data['before']))):\n",
    "    try:\n",
    "        src = cleaning(data['before'][i])\n",
    "        tgt = clean_news(simple_cleaning(data['after'][i]), filter_news = False)\n",
    "\n",
    "        d = {\"translation\": {\"src\": src, \"tgt\": tgt, 'prefix': 'tajuk-surat-khabar: '}}\n",
    "        train.write(f'{json.dumps(d)}\\n')\n",
    "    except Exception as e:\n",
    "        print(data['after'][i])\n",
    "        print(e)\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"translation\": {\"src\": \"1. Pengurus Taman Hidupan Liar Sunway Lagoon 2. majikan menyediakan kursus penjagaan binatang 3. ramai menyayangi hidupan liar 4. Singapore Zoological Garden\", \"tgt\": \"Tidak lama kemudian majikan menyediakan kursus penjagaan binatang. Azman kini menjawat jawatan sebagai Pengurus Taman Hidupan Liar Sunway Lagoon yang baginya mempunyai tarikan tersendiri. \\\"Taman ini boleh dianggap sebagai zoo butik dan perkara yang menjadi keutamaan adalah untuk memberi pendidikan kepada orang ramai menyayangi hidupan liar serta mengenali binatang dengan lebih rapat. \\\"Anak yang sulung, Shakir kini bertugas di Singapore Zoological Garden dan mengkhusus dalam penjagaan burung, manakala yang kedua, Shabri (24 tahun) menjadi penjaga haiwan di Zoo Melaka,\\\" ujarnya.\", \"prefix\": \"tajuk-surat-khabar: \"}}\r\n"
     ]
    }
   ],
   "source": [
    "!tail -n 1 train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 94%|███████████████████████████████  | 114488/121822 [00:24<00:01, 4746.45it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Maka dengan itu ramai yang tidak sabar melakukan aktiviti yang sebelum ini dilarang sama sekali termasuk beriadah. Tunggu sehingga keadaan terkawal dan tidak ramai orang.\n",
      "list index out of range\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "with open('keywords-headline-astroawani.json') as fopen:\n",
    "    data = json.load(fopen)\n",
    "\n",
    "for i in tqdm(range(len(data['before']))):\n",
    "    try:\n",
    "        src = cleaning(data['before'][i])\n",
    "        tgt = clean_news(simple_cleaning(data['after'][i]), filter_news = False)\n",
    "\n",
    "        d = {\"translation\": {\"src\": src, \"tgt\": tgt, 'prefix': 'tajuk-surat-khabar: '}}\n",
    "        train.write(f'{json.dumps(d)}\\n')\n",
    "    except Exception as e:\n",
    "        print(data['after'][i])\n",
    "        print(e)\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"translation\": {\"src\": \"1. versi bahasa Kabong versi 2. kandungan dihasilkan Pak Wo 3. Pak Wo Kabong hati 4. Terdapat versi bahasa Kabong 5. bahasa Kabong versi moden 6. bahasa Kabong Contohnya perkataan 7. dihasilkan Pak Wo berkait\", \"tgt\": \"Pak Wo Kabong semakin mendapat tempat di hati penduduk daerah kecil di Sarawak ini. \\\"Terdapat dua versi bahasa Kabong iaitu versi moden dan versi lama yang semakin hilang. TV Kabong kini memiliki lebih 25 ribu pengikut di laman Facebook dan setiap kandungan video yang dihasilkan Pak Wo berkait rapat mengenai isu semasa dan diolah menggunakan bahasa Kabong. \\\"Contohnya perkataan letik dah semakin kurang digunakan sebaliknya orang ramai memilih menggunakan perkataan lekat atau lekit,\\\" tambah Pak Wo.\", \"prefix\": \"tajuk-surat-khabar: \"}}\r\n"
     ]
    }
   ],
   "source": [
    "!tail -n 1 train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████| 360944/360944 [00:05<00:00, 62695.70it/s]\n"
     ]
    }
   ],
   "source": [
    "with open('product-description.json') as fopen:\n",
    "    data = json.load(fopen)\n",
    "    \n",
    "for i in tqdm(range(len(data['before']))):\n",
    "    try:\n",
    "        src = cleaning(data['before'][i])\n",
    "        tgt = simple_cleaning(data['after'][i])\n",
    "\n",
    "        d = {\"translation\": {\"src\": src, \"tgt\": tgt, 'prefix': 'penerangan-produk: '}}\n",
    "        train.write(f'{json.dumps(d)}\\n')\n",
    "    except Exception as e:\n",
    "        print(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\"translation\": {\"src\": \"1. permainan aksi platform scrolling sampingan 2. Nintendo Entertainment System\", \"tgt\": \"Amagon, yang dikenali di Jepun sebagai Totsuzen! Machoman (! lit. Tiba-tiba! Machoman?), adalah permainan aksi platform scrolling sampingan untuk Nintendo Entertainment System yang dikembangkan oleh Aicom.\", \"prefix\": \"penerangan-produk: \"}}\r\n"
     ]
    }
   ],
   "source": [
    "!tail -n 1 train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "train.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "!shuf train.json > shuffled-train.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "!head -n 5000 shuffled-train.json > test.json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1153570 train.json\r\n"
     ]
    }
   ],
   "source": [
    "!wc -l train.json"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
